#pragma comment (linker, "/STACK:100000000")
#include <stdio.h>
#include <algorithm>
#include <math.h>
#include <map>
#include <set>
#include <vector>
using namespace std;
#define N 501
#define K 1000000
#define eps 1E-12
struct P
{
	double x, y;
	P(double x=0, double y=0): x(x), y(y) {}
};
P operator +(P a, P b) { return P(a.x+b.x, a.y+b.y); }
P operator -(P a, P b) { return P(a.x-b.x, a.y-b.y); }
P operator *(P a, double b) { return P(a.x*b, a.y*b); }
double operator &(P a, P b) { return a.x*b.x+a.y*b.y; }
double operator *(P a, P b) { return a.x*b.y-a.y*b.x; }
bool operator ==(P a, P b) { return fabs(a.x-b.x)<eps && fabs(a.y-b.y)<eps; }
bool operator <(P a, P b) { return a.x+eps<b.x || (a.x-eps<b.x && a.y+eps<b.y); }
P t[N][4], r[K], y[3*N];
int f[N], q, h;
vector <int> v[N][3], d[K];
pair <double, int> w[3*N];
int e[4*K], c[2*K], g, z[4*K];
char u[4*K];
set <int> s;
map <P, int> m;
int in(P p, P *t)
{
	int i;
	for(i=0; i<3 && (t[i+1]-t[i])*(p-t[i])>-eps; i++);
	return i==3;
}
void add(P t)
{
	if(m.find(t)==m.end())
	{
		r[h]=t;
		m[t]=h;
		h++;
	}
	q=m[t];
}
bool sec(P a, P b, P c, P d)
{
	double d0, d1, d2;
	d0=(b-a)*(d-c);
	d1=(c-a)*(d-c);
	d2=(c-a)*(b-a);
	if(fabs(d0)<eps)
	{ 
		if(a==c || a==d) { d0=1; d1=0; }
		else if(b==c || b==d) { d0=1; d1=1; }
		else return 0;
	}
	else if(d0<0) { d0=-d0; d1=-d1; d2=-d2; }
	if(d1<-eps || d1>d0+eps || d2<-eps || d2>d0+eps) return 0;
	add((a*d0+(b-a)*d1)*(1/d0));
	return 1;
}
void edge(int i, int j, int k)
{
	if(i!=j)
	{
		e[g]=j; e[g+1]=i; c[g/2]=k;
		d[i].push_back(g);
		d[j].push_back(g+1);
		g+=2;
	}
}
void dfs(int i)
{
	int j;
	if(s.size()) f[-*s.begin()]=1;
	for(u[i]=1, j=z[i]; j!=i; u[j]=1, j=z[j]);
	for(j=z[i]; j!=i; j=z[j])
		if(!u[j^1])
		{
			if(j&1)	{ s.insert(-c[j/2]); dfs(j^1); s.erase(-c[j/2]); }
			else { s.erase(-c[j/2]); dfs(j^1); s.insert(-c[j/2]); }
		}
}
int main()
{
	int i, j, k, l, nh, n;
	P a, b;
	for(scanf("%d", &n), i=0; i<n; i++)
	{
		for(j=0; j<3; scanf("%lf%lf", &t[i][j].x, &t[i][j].y), j++);
		t[i][3]=t[i][0];
		if((t[i][1]-t[i][0])*(t[i][2]-t[i][0])<0) swap(t[i][1], t[i][2]);
		for(j=0; j<i; f[j]|=in(t[j][0], t[i]) && in(t[j][1], t[i]) && in(t[j][2], t[i]), j++);
	}
	nh=0;
	for(i=0; i<n; i++)
		if(!f[i])
			for(k=0; k<3; add(t[i][k]), v[i][k].push_back(q), v[i][(k+2)%3].push_back(q), y[nh++]=t[i][k], k++);
	sort(y, y+nh);
	for(i=0; i<n; i++)
		if(!f[i])
			for(j=i+1; j<n; j++)
				if(!f[j])
					for(k=0; k<3; k++)
						for(l=0; l<3; l++)
							if(sec(t[i][k], t[i][k+1], t[j][l], t[j][l+1])) { v[i][k].push_back(q); v[j][l].push_back(q); }
	for(i=0; i<n; i++)
		if(!f[i])
			for(k=0; k<3; k++)
			{
				l=v[i][k].size();
				a=t[i][k+1]-t[i][k];
				b=t[i][k];
				for(j=0; j<l; w[j]=make_pair((r[v[i][k][j]]-b)&a, v[i][k][j]), j++);
				sort(w, w+l);
				for(j=0; j+1<l; edge(w[j].second, w[j+1].second, i), j++);
			}
	for(i=0; i<h; i++)
	{
		l=d[i].size();
		for(j=0; j<l; a=r[e[d[i][j]]]-r[i], w[j]=make_pair(atan2(a.y, a.x), d[i][j]), j++);
		sort(w, w+l); w[l]=w[0];
		for(j=0; j<l; z[w[j+1].second^1]=w[j].second, d[i][j]=w[j].second, j++);
	}
	for(i=0; i<n; f[i]=0, i++);
	for(i=0; i<nh; i++)
	{
		add(y[i]);
		j=d[q][0]^1;
		if(!u[j]) { s.clear(); dfs(j); }
	}
	for(j=0, i=0; i<n; j+=f[i], i++);
	for(printf("%d\n", j), i=0; i<n; i++)
		if(f[i]) printf("%d ", i+1);
	printf("\n");
	return 0;
}